const logger = require('./logger');

/**
 * 错误处理中间件
 * @param {Error} err - 错误对象
 * @param {Object} ctx - Koa上下文
 * @param {Function} next - 下一个中间件
 */
const errorHandler = async (err, ctx, next) => {
  try {
    await next();
  } catch (error) {
    // 记录错误日志
    logger.error('Error:', {
      message: error.message,
      stack: error.stack,
      url: ctx.url,
      method: ctx.method,
      body: ctx.request.body,
      query: ctx.query,
      params: ctx.params,
      user: ctx.state.user
    });

    // 设置状态码
    ctx.status = error.status || 500;

    // 设置响应体
    ctx.body = {
      code: error.status || 500,
      message: error.message || '服务器内部错误',
      data: process.env.NODE_ENV === 'development' ? error.stack : undefined
    };

    // 触发应用级错误事件
    ctx.app.emit('error', error, ctx);
  }
};

module.exports = errorHandler; 